草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 调用 gcc _without_ -pthread 有什么好处?

我们知道添加-pthreadmakesGCCusereentrant/thread-safecode(编译C/C++代码时)。虽然我想如果您允许不可重入,您确实可以在这里和那里节省几个周期-我想知道不总是指定-pthread是否有任何实际优势。有吗? 最佳答案 一个例子:std::shared_ptr的libstdc++实现doesn'tuselockingwhencompiledwithout-pthread,如果您在单线程环境中大量使用共享指针,这可以大大提高性能。 关于c++-调用

c++ - 随机数字列表

#include#include#include#include#includeintmain(){inti;intdiceRoll;for(i=0;i这是我用c(codeblocks)编写的用于获取随机数的代码,问题是我总是得到相同的序列:41,18467,6334,26500等...我还在学习,所以请试着像和一个8岁的D说话一样解释: 最佳答案 您每次都会得到相同的序列,因为未设置随机数生成器的种子。您需要调用srand(time(NULL))像这样:intmain(){srand(time(NULL));....

c++ - 使用 C API 覆盖 Lua 中的赋值运算符

我在我的C++程序中有对象作为用户数据传递给Lua,我重写了这个用户数据的元表,以便对对象的索引进行赋值(通过__newindex和__index)导致对C的调用,这转换赋值以影响C++对象或将C++元素转换为Lua值(另一个用户数据或基本类型,如bool、number、string)。用户数据作为参数传递给从我的C++程序调用的类似事件的Lua函数。luaL_newmetatable(L,"object");lua_pushstring(L,"__index");lua_pushvalue(L,-2);/*pushesthemetatable*/lua_settable(L,-3);

c++ - 发布和调试编译程序的源代码是否有所不同? [C/C++]

到目前为止,我已经对C++编程有了更多的了解,并一直运行到整个“调试与发行”编译版本。现在,我觉得我对已发布和调试版本的已编译代码之间的某些差异有了相当不错的了解。对于代码的调试版本,编译器不会尝试优化代码,以便您可以运行调试器并逐行浏览程序。本质上,编译后的代码在执行方式上与源代码非常相似。在Release模式下编译时,编译器会尝试优化程序,使其具有相同的功能,但效率更高。但是,我很好奇发行版本和调试版本之间的源代码是否可以不同的实例。也就是说,当我们提到调试与发布时,我们是否总是在谈论编译后的代码,或者源代码中是否存在差异?出现此问题是由于我使用的是专有的编程语言,在该语言中,不存

c++ - C/C++ 预处理器中宽字符串文字的宏参数字符串化

C预处理器有一个叫做stringification的特性.这是一个允许从宏参数创建(窄)字符串文字的功能。可以这样使用:#definePRINTF_SIZEOF(x)printf("sizeof(%s)==%d",#x,sizeof(x))/*stringification^^*/使用示例:PRINTF_SIZEOF(int);...可能打印:sizeof(int)==4如何从宏参数创建一个宽字符串文字?换句话说,我该如何实现WPRINTF_SIZEOF?#defineWPRINTF_SIZEOF(x)wprintf() 最佳答案

c++ - gcc 版本 4 和 5 和 6 之间的区别

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion在为arm交叉编译器下载源代码时,我发现有多个gcc版本正在维护中。最新版本为v4.9.4、v5.4.0和v6.2.0。为什么v4比v5的最新版本和v6的第一个版本更新,这些版本之间的主要区别是什么?

c++ - Ruby FFI 找不到某些功能?

我正在尝试使用Ruby的FFI库链接来自bitcoin-coresecp256k1library的函数.制作secp256k1_ecdsa_sign功能可访问,我使用autotools构建了libsecp256k1(按照README.md中的指示)。然后,我通过运行g++-sharedsecp256k1/src/.libs/libsecp256k1_la-secp256k1.o创建了一个要在FFI中使用的共享对象。使用FFI将其导入到我的Ruby文件中,让我可以使用该函数并且一切正常。我正在尝试对secp256k1_ecdsa_sign_recoverable执行完全相同的操作函数,它

c++ - 如何同时迭代两个 Boost 预处理器序列?

我想知道是否可以通过Boost预处理器序列完成以下操作。(大多数SO问题以及Boost预处理器示例仅讨论1个序列)#defineseq1(a)(b)(c)#defineseq2(1)(2)(3)//Nowiterateoverbothofthematthesametime这是我的动力。我必须为很多类型定义一些函数,例如voidadd(intval){obj.AddInt(val);}voidadd(doubleval){obj.AddDouble(val);}我正在考虑定义两个序列,例如#definetypes(int)(double)...#definefuncs(AddInt)(A

c++ - 提供给 std::unique_ptr 的简单自定义删除器 lambda:为什么使用引用捕获默认值 ([&]) 而不是非捕获 ([])?

背景Cppreference:ssectiononstd::unique_ptr显示以下演示,用于向unique_ptr提供自定义删除器实例:std::unique_ptr>p(newD,[&](D*ptr){std::cout在哪里D,就这个问题而言,就像简单的自定义类型一样,比如structD{D(){std::cout此外,上面的引用说明了删除器的以下类型要求:TyperequirementsDeletermustbeFunctionObjectorlvaluereferencetoaFunctionObjectorlvaluereferencetofunction,callab

c++14 unique_ptr 并使 unique_ptr 错误使用已删除函数 'std::unique-ptr'

我有这样的功能..unique_ptrtest(unique_ptr&&node,stringkey){if(!node){returnmake_unique(key);}elsereturnnode;}如果节点为空,我想创建一个节点,或者返回节点。但它错误地说“使用已删除的函数'std::unique_ptr'”。我做错了什么? 最佳答案 问题在于您调用函数的方式。但首先你应该按值接受你的std::unique_ptr,而不是r-reference。然后你需要在调用函数时std::move()你的指针://acceptbyvalu